package com.j4it.migration.modules.sys.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import jade.core.Profile;
import jade.core.ProfileImpl;
import jade.core.Runtime;
import jade.wrapper.ContainerController;
import jade.wrapper.StaleProxyException;

public class SysUtils {

    protected Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 初始化一个JADE主容器
     * 
     * @param host 容器所在的主机地址
     * @param port 容器所在的主机端口
     * @param containName 容器名称
     * @param namePrefix Agent名字的前缀。Agent的名字组成：namePrefix_数字，如：Chinese_1,Chinese_2
     * @return
     */
    public static ContainerController initMainAgentContainer(String host, String port, String containName, String namePrefix) {
        Runtime rt = Runtime.instance();
        Profile p = new ProfileImpl();
        p.setParameter(Profile.MAIN_HOST, host);
        p.setParameter(Profile.MAIN_PORT, port);
        p.setParameter(Profile.CONTAINER_NAME, containName);
        p.setParameter(Profile.AGENT_TAG, namePrefix);
        return rt.createMainContainer(p);
    }

    /**
     * 初始化一个JADE外围容器
     * 
     * @param host 容器所在的主机地址
     * @param port 容器所在的主机端口
     * @param containName 容器名称
     * @param namePrefix Agent名字的前缀。Agent的名字组成：namePrefix_数字，如：Chinese_1,Chinese_2
     * @return
     */
    public static ContainerController initAgentContainer(String host, String port, String containName, String namePrefix) {
        Runtime rt = Runtime.instance();
        Profile p = new ProfileImpl();
        p.setParameter(Profile.MAIN_HOST, host);
        p.setParameter(Profile.MAIN_PORT, port);
        p.setParameter(Profile.CONTAINER_NAME, containName);
        p.setParameter(Profile.AGENT_TAG, namePrefix);
        return rt.createAgentContainer(p);
    }

    /**
     * 批量初始化Agent
     * 
     * @param container Agent生存的容器
     * @param agentClassName Agent实例类
     * @param nums Agent数量
     * @param args 初始化参数数组
     */
    public static void initAgents(ContainerController container, String agentClassName, Object[] args, Integer nums) {
        for (int i = 1; i <= nums; i++) {
            try {
                container.createNewAgent("%A" + i, agentClassName, args);
            } catch (StaleProxyException e) {
                e.printStackTrace();
            }
        }
    }

}
